package data;
import java.sql.*;
import java.util.Iterator;
import java.util.List;
import java.util.LinkedList;
 

import domain.Donacion;
import domain.Donador;
import domain.GestorProductos;
import domain.Producto;



public class JDBCDonacionDAO implements IDonacionDAO{

	private Connection conn;
    IUsuarioDAO ddao;
    IProductoDAO pdao;
    
     public JDBCDonacionDAO() {
            conn = ConnectionManager.getInstance().checkOut();
            ddao = new JDBCUsuarioDAO();
            pdao= new JDBCProductoDAO();
        }

    
   
    public void insertDonacion(Connection conn, Donacion d) {
            // TODO Auto-generated method stub
            
    }

   
    public List<Donacion> selectAllDonaciones() {
           
    	PreparedStatement stmt = null;
        List<Donacion> searchResults = new LinkedList<Donacion>();
        ResultSet result = null;
        
        try {

            String sql = "SELECT * FROM donaciones";
            stmt = conn.prepareStatement(sql); 
            stmt.executeQuery();
            result = stmt.executeQuery();
                
            while (result.next()) {
                Donacion temp = new Donacion();
                //get Donador
                Donador dona=ddao.selectDonador( result.getString("donador"));
                temp.setDonador(dona);
                
                
                //getArticulos
                
                
                temp.setArticulosDonados(pdao.selectProductosDonacion(conn, result.getString("DonacionOID")));

                //getPendiente
                temp.setPendiente(result.getBoolean("pendiente"));
                
                searchResults.add(temp);
            }
        } catch (SQLException e) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
            ConnectionManager.getInstance().checkIn(conn);
            try {
                if (result != null)
                    result.close();
                if (stmt != null)
                    stmt.close();
            } catch (SQLException e) {
            }

        }
        return searchResults;
        }
    

    
    public List<Donacion> selecAllDonacionesPendientes() {
           
            PreparedStatement stmt = null;
    List<Donacion> searchResults = new LinkedList<Donacion>();
    ResultSet result = null;
    
    try {

        String sql = "SELECT * FROM donaciones WHERE pendiente = true";
        stmt = conn.prepareStatement(sql); //conn es una conexión válida
        stmt.executeQuery();
        result = stmt.executeQuery();
            
        while (result.next()) {
            Donacion temp = new Donacion();
            //get Donador
            Donador dona=ddao.selectDonador( result.getString("donador"));
            temp.setDonador(dona);
            //get idDonacion
            temp.setIdDonacion(result.getString("idDonacion"));
            //get articulos
            
            temp.setArticulosDonados(pdao.selectProductosDonacion(conn,result.getString("DonacionOID")));
            
            //getPendiente
            temp.setPendiente(result.getBoolean("pendiente"));
            //getOID
            temp.setIdDonacion(result.getString("DonacionOID"));
            //get fecha
            temp.setFechaDonacion(result.getDate("fechadonacion"));
            searchResults.add(temp);
        }
    } catch (SQLException e) {
        System.out.println("Message: " + e.getMessage());
        System.out.println("SQLState: " + e.getSQLState());
        System.out.println("ErrorCode: " + e.getErrorCode());
    } finally {
        ConnectionManager.getInstance().checkIn(conn);
        try {
            if (result != null)
                result.close();
            if (stmt != null)
                stmt.close();
        } catch (SQLException e) {
        }

    }
    return searchResults;
    }


	public void validaDonacion(String donacionOID) {
		// TODO Auto-generated method stub
		
		PreparedStatement stmt = null;
        ResultSet result = null;
        
        String sql = "UPDATE donaciones SET pendiente=0 WHERE (DonacionOID = ?) ";
		
        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, donacionOID);
            
            
            stmt.executeUpdate();
            
        } catch (SQLException e) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
            try {
                if (result != null) {
                    result.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
        }
		Donacion d=this.select(donacionOID);
		 List<Producto> l= new LinkedList();
		 l=d.getArticulosDonados();
		Iterator<Producto> it= l.iterator();
		while (it.hasNext()){
			Producto p=(Producto) it.next();
			
			GestorProductos g= new GestorProductos();
			g.validarProducto(p.getIdProducto());
			
		}
		
	}

	public Donacion select( String donacionOID) {
		PreparedStatement stmt = null;
        ResultSet result = null;
        Donacion d = new Donacion();
        String sql = "SELECT * FROM donaciones WHERE (DonacionOID = ?) ";

        try {
            stmt = conn.prepareStatement(sql);
            stmt.setString(1, donacionOID);
            result = stmt.executeQuery();

            result.next();
          //get Donador
            Donador dona=ddao.selectDonador( result.getString("donador"));
            d.setDonador(dona);
            
            
            //getArticulos
            d.setArticulosDonados(pdao.selectProductosDonacion(conn,result.getString("DonacionOID")));

            //getPendiente
            d.setPendiente(result.getBoolean("pendiente"));
            //getIDdonacion
            d.setIdDonacion(result.getString("donacionOID"));
            
        } catch (SQLException e) {
            System.out.println("Message: " + e.getMessage());
            System.out.println("SQLState: " + e.getSQLState());
            System.out.println("ErrorCode: " + e.getErrorCode());
        } finally {
            try {
                if (result != null) {
                    result.close();
                }
                if (stmt != null) {
                    stmt.close();
                }
            } catch (SQLException e) {
            }
        }
        return d;
	}
		
	}

	

	

	
